package com.zdy.demo;

import java.util.ArrayList;
import java.util.Stack;
import com.zdy.demo.Common.ListNode;



/**
 * 题目5： 从尾到头打印链表
 * @author deyou
 * @version 1.0
 * @date 2021/5/19 17:49
 */
// class ListNode {
//    int val;
//    ListNode next;
//
//    ListNode(int val) {
//        this.val = val;
//    }
//}

public class PrintListReversing05 {
    /***
     * 解法一： 利用栈，先入栈，后出栈
     * @param headNode
     * @return
     */
    public static ArrayList<Integer> printListReverse1(Common.ListNode headNode){

        //创建数组列表
        ArrayList<Integer> list = new ArrayList<>();
        //创建一个栈
        Stack<ListNode> stack = new Stack<>();
        //入栈
        while(headNode != null){
            stack.push(headNode);
            headNode = headNode.next;
        }
        //出栈
        while(!stack.isEmpty()){
            //存入数组链表
            list.add(stack.pop().val);
        }
        return list;
    }

    public static ArrayList<Integer> printListReverse2(ListNode headNode){
        ArrayList<Integer> list = new ArrayList<>();
        if(headNode != null){
            if(headNode.next != null){
                list = printListReverse2(headNode.next);
            }
            list.add(headNode.val);
        }
        return list ;
    }
}
